package com.frank.towerrush.activity;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.util.SparseArray;
import android.view.WindowManager;

/**
 * 所有Activity的基类，实现一些通用方法
 * 
 * @author Frank
 *
 */
public abstract class BaseActivity extends Activity {

    /**
     * activity队列，存储已经打开的activity
     */
    protected static SparseArray<BaseActivity> activityQueue = new SparseArray<BaseActivity>();
    /**
     * activity队列的计数器，统计至今为止打开过的activity数量
     */
    protected static int activityCount = 0;
    /**
     * 当前activity在队列中的key
     */
    protected int queueKey = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 强制横屏显示
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        // 保持屏幕常亮
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        // 把当前activity加入到队列中
        activityCount++;
        queueKey = activityCount;
        activityQueue.put(queueKey, this);

        init();
        loadData();
        event();
    }

    /**
     * 初始化
     */
    protected abstract void init();

    /**
     * 事件处理
     */
    protected abstract void event();

    /**
     * 数据读取
     */
    protected abstract void loadData();

    @Override
    protected void onDestroy() {
        // 把当前activity从队列中移除
        activityQueue.remove(this.queueKey);
        super.onDestroy();
    }

    /**
     * 跳转页面
     * 
     * @param cls
     *            要跳转到的页面
     * @param closeThisActivity
     *            是否关闭当前页面
     */
    protected void startActivity(Class<?> cls, boolean closeThisActivity) {
        startActivity(cls, null, closeThisActivity);
    }

    /**
     * 跳转页面
     * 
     * @param cls
     *            要跳转到的页面
     * @param extras
     *            携带的数据
     * @param closeThisActivity
     *            是否关闭当前页面
     */
    protected void startActivity(Class<?> cls, Bundle extras, boolean closeThisActivity) {
        Intent intent = new Intent(this, cls);
        if (extras != null) {
            intent.putExtras(extras);
        }
        startActivity(intent);
        if (closeThisActivity) {
            finish();
        }
    }
}
